/*
在JavaScript的世界里，一切都是对象。
但是某些对象还是和其他对象不太一样。为了区分对象的类型，我们用typeof操作符获取对象的类型，
它总是返回一个字符串：

typeof 123; // 'number'
typeof NaN; // 'number'
typeof 'str'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof Math.abs; // 'function'
typeof null; // 'object'
typeof []; // 'object'
typeof {}; // 'object'


可见，number、string、boolean、function和undefined有别于其他类型。特别注意null的类型是object，
Array的类型也是object，如果我们用typeof将无法区分出null、Array和通常意义上的object——{}。
*/








//包装对象
//包装对象通常用 new 类型( 需要包装的变量或值 )

/*
var aaa=123;
//Numder
var bbb= new Number(123)//123是Number类型的，经过包装对象后，类型变为Object
//Object

//那他们相不相等？？
{if (aaa===bbb) {
    console.log(typeof aaa);
    console.log(typeof bbb);
    console.log("类型一致");
    
}
else{
    console.log(typeof aaa);
    console.log(typeof bbb);
    console.log("类型不一致");
}
}
//实际上，经过对比发现，经过包装对象后数据类型不一样
//其他类型的数据比如：string、boolean、function等数据也是类似操作
*/

//那么包装对象的意义在哪呢？？
/*var str = "hello";
str.name = "test";
console.log(str.name);//执行会报undefined


str=new String(str)
str.name="江小秋"
console.log(str.name);//执行后的确会打印str.name的内容
 */


//为什么有这样的区别呢???

//总结:
/*
如果需要原始类型具有属性和方法，那包装对象就要登场，运行完之后，
包装对象创建的对象就会被销毁，在上面的例子中，第二行给name属性赋值的时候，
包装对象会登场，创建一个str对应的对象，当然，这行执行完了这个对象就会被销毁。
然后在第三行又会创建一个新的包装对象，这个对象当然是没有name属性的了，
所以输出的是undefined。
*/






//那要是忘了写 new 呢？
/*
var a=384;
var bbb=parseFloat(a);//parseFloat()截取字符串中的数字，
                    //必须是数字开头开始解析，否则遇到非数字就会停止截取
console.log(bbb);
console.log(typeof bbb);//numder类型
var ccc=Number(a);//没使用new，则会把Number()当成普通函数处理，将数据直接转换成函数对应的数据类型，而不会包装成对象
console.log(ccc);
console.log(typeof ccc);//numder类型
var ddd= new Number(a);
ddd.a=a;
ddd.name="我是ddd";
console.log(ddd);
console.log(typeof ddd);//object类型
console.log(typeof ddd.name);//也可也检测对象里的属性的数据类型，但是依然不能检测出
                            //null，数组和对象的数据类型

 */     



//Array.isArray()
/*
var abc={
    a:123,
    b:"hhhh",
    c:3<2,
    d:x=> 3,
    e:[12,4,5],
    f:{
        s:123
    }
};
console.log(Array.isArray(abc.e));
console.log(abc.c);
var abcd;
console.log(abcd);//undefined和null不一样的
abcd=null;
if (abcd===null) {
    console.log("变量abcd是null值");
    
}
else{
    console.log("不是null值");
}

console.log(typeof null);
*/




//试一试玩一玩
//trim()剪掉字符串头尾的空白符，包括空格，tab制表符，换行等，但是不改变字符串长度
//延申使用
//trimEnd()、trimStart()、trimRight、trimLeft()


/*
var a="    dslf  ksl123   ";
console.log(a.toString());
console.log(a.length);
console.log( a.trim());
console.log(a.length);
console.log(a.trimEnd());
console.log(a.length);
console.log(a.trimStart());
console.log(a.length);
console.log(a.trimRight());
console.log(a.length);
console.log(a.trimLeft());
console.log(a.length);
*/





